﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;     
using Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;
using System.IO;
using System.Reflection;
using Bostik.Common.Infos;
using Business;

namespace Bostik
{
    public partial class Frm_Predios : Form
    {
        private bool EsConsulta = false;

        public Frm_Predios()
        {
            InitializeComponent(); 
        }


        private void habilitaControles()
        {

            txtDescripcionLocal.Enabled = true;
            txtUbicacion.Enabled = true;
            txtEmpresa.Enabled = true;
            txtAlto.Enabled = true;
            txtAncho.Enabled = true;
            txtLargo.Enabled = true ;
        }

        private void DeshabilitaControles()
        {

            txtDescripcionLocal.Enabled = false;
            txtUbicacion.Enabled = false;
            txtEmpresa.Enabled = false;
            txtAlto.Enabled = false;
            txtAncho.Enabled = false;
            txtLargo.Enabled = false; 
        }


        private void LlenadoCombo()
        {

            AccesoBusiness negocio = new AccesoBusiness();


            DataTable resultado = negocio.LlenadoCombos("cmbPrediosProc");

            cmbPredio.DisplayMember = "DescripcionLocal";
            cmbPredio.ValueMember = "IdPredio";
            cmbPredio.DataSource = resultado;



            DataTable resultadoClientes = negocio.LlenadoCombos("cmbClientesProc");

            cmbCliente.DisplayMember = "NomCliente";
            cmbCliente.ValueMember = "IdCliente";
            cmbCliente.DataSource = resultadoClientes;


        }

        OpenFileDialog BuscarImagen = new OpenFileDialog();

        private void button2_Click(object sender, EventArgs e)
        {

            if (string.IsNullOrEmpty(txtIdPredio.Text))
                return;
           
            BuscarImagen.Filter = "Archivos de Imagen|*.*";
            //Aquí incluiremos los filtros que queramos.
            BuscarImagen.FileName = "";

            BuscarImagen.Title = "Agregar Documento, Foto, Factura";


            BuscarImagen.InitialDirectory = "C:\\";
            //BuscarImagen.FileName = this.textBox1.Text;

            if (BuscarImagen.ShowDialog() == DialogResult.OK)
            {

                /// Si esto se cumple, capturamos la propiedad File Name y la guardamos en el control
                this.txtDescripcionLocal.Text = BuscarImagen.FileName;
                String Direccion = BuscarImagen.FileName;
                this.pictureBox1.ImageLocation = Direccion;

                //Pueden usar tambien esta forma para cargar la Imagen solo activenla y comenten la linea donde se cargaba anteriormente 

                //this.pictureBox1.ImageLocation = textBox1.Text;

                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            }
        }
                   

        private void btnGuardaDocumento_Click(object sender, EventArgs e)
        {
             InfoPredios Info = new InfoPredios();

             if (string.IsNullOrEmpty(txtIdPredio.Text))
                 return;

             if (string.IsNullOrEmpty(BuscarImagen.FileName))
                 return;

            Info.IdPredio = Convert.ToInt32(txtIdPredio.Text);
            Info.DescripcionDoc = txtDescripcionDoc.Text;
            Info.Archivo = StreamFile(BuscarImagen.FileName);
            Info.NomDocumento = BuscarImagen.SafeFileName;
              
            AccesoBusiness negocio = new AccesoBusiness();

            DataSet resultado = negocio.GuardaArchivoPredio(Info);

            MessageBox.Show("Imagen Guardada", "Bostik", MessageBoxButtons.OK, MessageBoxIcon.Information);

            Busqueda();

          


        }

        private void Busqueda()
        {
            AccesoBusiness negocio = new AccesoBusiness();

            if (cmbPredio.SelectedValue == null)
                return;

            int IdPredio = 0;
            if (cmbPredio.Enabled)
            {
                if (!string.IsNullOrEmpty(cmbPredio.SelectedValue.ToString()))
                    IdPredio = Convert.ToInt32(cmbPredio.SelectedValue);
            }
            else
            {
                if (!string.IsNullOrEmpty(txtIdPredio.Text))
                    IdPredio = Convert.ToInt32(txtIdPredio.Text);
            }

            DataSet resultado = negocio.BuscaPredio(IdPredio);

            if (resultado.Tables[0].Rows.Count > 0)
            { 
                txtIdPredio.Text = resultado.Tables[0].Rows[0]["IdPredio"].ToString();
                txtDescripcionLocal.Text = resultado.Tables[0].Rows[0]["DescripcionLocal"].ToString();
                txtUbicacion.Text = resultado.Tables[0].Rows[0]["Ubicacion"].ToString();
                txtEmpresa.Text = resultado.Tables[0].Rows[0]["Empresa"].ToString();
                txtAlto.Text = resultado.Tables[0].Rows[0]["Alto"].ToString();
                txtAncho.Text = resultado.Tables[0].Rows[0]["Ancho"].ToString();
                txtLargo.Text = resultado.Tables[0].Rows[0]["Largo"].ToString();
                txtRenta.Text = resultado.Tables[0].Rows[0]["Renta"].ToString();
                


            }
            else
            {
                MessageBox.Show("No existen datos para su busqueda", "Bostik", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private byte[] StreamFile(string filename)
        {
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);

            // Create a byte array of file stream length
            byte[] ImageData = new byte[fs.Length];

            //Read block of bytes from stream into the byte array
            fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length));

            //Close the File Stream
            fs.Close();
            return ImageData; //return the byte data
        }

        private void btnGuardaContrato_Click(object sender, EventArgs e)
        {
            InfoPrediosContrato Info = new InfoPrediosContrato();

            if (string.IsNullOrEmpty(cmbCliente.Text.ToString()))
                 return;

             byte[] Contrato =   StreamFile(@"C:\Bostik\Template_Contrato_temp"+txtIdPredio.Text + ".doc");
            
             Info.IdCliente = Convert.ToInt32(cmbCliente.SelectedValue);
             Info.IdPredio = Convert.ToInt32(txtIdPredio.Text);
             Info.Archivo = Contrato;
             Info.NombreArchivo = "Contrato_Cliente" + cmbCliente.SelectedValue.ToString() + "_Predio_" + txtIdPredio.Text+".doc";


             AccesoBusiness negocio = new AccesoBusiness();

             DataSet resultado = negocio.GuardaPredioContrato(Info);

             MessageBox.Show("Cotnrato Guardado", "Bostik", MessageBoxButtons.OK, MessageBoxIcon.Information);
             this.btnGuardaContrato.Enabled = false;

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {

            if (string.IsNullOrEmpty(txtDescripcionLocal.Text.Trim()))
                return;
            try
            {
                InfoPredios Info = new InfoPredios();
                if (string.IsNullOrEmpty(txtIdPredio.Text))
                    Info.IdPredio = -1;
                else
                    Info.IdPredio = Convert.ToInt32(txtIdPredio.Text);

                Info.DescripcionLocal = txtDescripcionLocal.Text;
                Info.Ubicacion = txtUbicacion.Text;
                Info.Empresa = txtEmpresa.Text;
                Info.Alto = txtAlto.Text;
                Info.Ancho = txtAncho.Text;
                Info.Largo = txtLargo.Text;
                Info.Renta = txtRenta.Text;

                AccesoBusiness negocio = new AccesoBusiness();

                DataSet resultado = negocio.GuardaPredio(Info);

                txtIdPredio.Text =  resultado.Tables[0].Rows[0]["IdPredio"].ToString();
                cmbCliente.Enabled = true;
                MessageBox.Show("Datos guardados.", "Bostik", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Busqueda();
                this.button2.Enabled = true;
                this.btnGuardaDocumento.Enabled = true;
                
            }
            catch
            {
                MessageBox.Show("Intentelo de nuevo mas tarde", "Bostik", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 
                cmbCliente.Enabled = false;
                btnHacerContrato.Enabled = false;
      

            }
            
           

        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
           

                txtIdPredio.Text = string.Empty;
                txtDescripcionLocal.Text = string.Empty;
                txtUbicacion.Text = string.Empty;
                txtEmpresa.Text = string.Empty;
                txtAlto.Text = string.Empty;
                txtAncho.Text = string.Empty;
                txtLargo.Text = string.Empty;
                txtRenta.Text = string.Empty;


                cmbCliente.Text = string.Empty; 
                txtDescripcionDoc.Text = string.Empty;

                btnBuscar.Enabled = false;
                cmbPredio.Enabled = false;
                cmbCliente.Enabled = false;
                btnHacerContrato.Enabled = false;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            Busqueda();
        }

        private void btnHaceContrato_Click(object sender, EventArgs e)
        {

            if (string.IsNullOrEmpty(cmbCliente.Text) || cmbCliente.SelectedValue == null)
                return;

            WordDocument wd = new WordDocument(Path.Combine(Application.StartupPath, @"c:\Bostik\Template_Contrato.doc"), txtIdPredio.Text);
            //wd.FindAndReplace("<Date>", dtDate.Value.ToString("D")(;0
            //wd.FindAndReplace("<SecondTime>", dtSecondTime.Value.ToString("t"));


            AccesoBusiness negocio = new AccesoBusiness();

            DataSet resultado = negocio.BuscarDatosContrato(cmbCliente.SelectedValue.ToString(), txtIdPredio.Text);

           
            wd.FindAndReplace("@@FechaHoy", DateTime.Now.ToString("D"));
            wd.FindAndReplace("@@NomCliente", cmbCliente.Text);
            wd.FindAndReplace("@@Renta", txtRenta.Text);
            wd.FindAndReplace("@@NomCliente", cmbCliente.Text);
            if(resultado.Tables[1].Rows.Count>0)
            wd.FindAndReplace("@@DomicilioCliente", resultado.Tables[1].Rows[0]["Direccion"].ToString());

            if (resultado.Tables[0].Rows.Count > 0)
            {
                wd.FindAndReplace("@@Empresa", resultado.Tables[0].Rows[0]["Empresa"].ToString());
                wd.FindAndReplace("@@DomicilioEmpresa", resultado.Tables[0].Rows[0]["Ubicacion"].ToString());
            }
 
            wd.SaveDocument();
            wd.CloseDocument();



            Word.Application objWord = (Word.Application)Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
            object missing = System.Reflection.Missing.Value;
            object abrirDoc = @"C:\Bostik\Template_Contrato_temp"+txtIdPredio.Text + ".doc";
            object readOnly = false;
            object isVisible = true;
            objWord.Documents.Open(ref abrirDoc, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing);
            
            objWord.Visible = true;
            objWord.Activate();

            this.btnGuardaContrato.Enabled = true;
        }

        private void Frm_Predios_Load(object sender, EventArgs e)
        {

            EsConsulta = VariablesGlobales.EsConsulta;
            LlenadoCombo();
            btnGuardaContrato.Enabled = false;
            if (EsConsulta)
            {
                this.btnHacerContrato.Enabled = true;
                cmbCliente.Enabled = true;
                this.btnBuscar.Enabled = true;
                cmbPredio.Enabled = true;


                LlenadoCombo();

                if (VariablesGlobales.EsAdmin)
                    habilitaControles();
                else
                    DeshabilitaControles();
            }
            else
            {
                this.btnHacerContrato.Enabled = false;
                cmbCliente.Enabled = false;
                this.btnBuscar.Enabled = false;
                cmbPredio.Enabled = false;
                btnGuardaContrato.Enabled = false;
                this.button2.Enabled = false;
                this.btnGuardaDocumento.Enabled = false;
            }
        }
    }
}




